package com.linkgie.galaxyframework.utils;

/**
 * 上下文调度;
 */
public interface ContextSchedule {

    /**
     * 在当前执行上下文的内部进入指定的执行上下文；
     * <p>
     * 此方法定义的调度顺序与 {@link #wrap(ExecutionContext)} 方法相反；
     * @param innerContext 内层的执行上下文；在当前 {@link ContextSchedule} 设置的上下文的内部执行；
     * @return 返回新的上下文调度；
     */
    ContextSchedule enter(ExecutionContext innerContext);

    /**
     * 以指定的执行上下文作为外层上下文，从外层上下文中调用在当前的执行上下文；
     * <p>
     * 此方法定义的调度顺序与 {@link #enter(ExecutionContext)} 方法相反；
     * 
     * @param outerContext 外层的执行上下文；会作为外层上下文，内部包裹执行当前 {@link ContextSchedule} 设置的上下文；
     * @return 返回新的上下文调度；
     */
    ContextSchedule wrap(ExecutionContext outerContext);

    /**
     * 完成调度；
     * @return 返回包含之前所有上下文调度定义的执行上下文；
     */
    ExecutionContext complete();
    
}